layui.extend({
  socketio: '{/}' + '', //网络通讯模块
}).use('layim', function (layim) {
  //基础配置
  layim.config({
    //初始化接口
    init: {
      url: 'http://'+layui.cache['webserverip']+'/'+layui.cache['contentPath']+'/im/initinfo' + '?userid=' + layui.cache['userid'] + '&orgid=' + layui.cache['orgid']
      , data: {}
    }
    //或采用以下方式初始化接口
    /*
    ,init: {
      mine: {
        "username": "LayIM体验者" //我的昵称
        ,"id": "100000123" //我的ID
        ,"status": "online" //在线状态 online：在线、hide：隐身
        ,"remark": "在深邃的编码世界，做一枚轻盈的纸飞机" //我的签名
        ,"avatar": "a.jpg" //我的头像
      }
      ,friend: []
      ,group: []
    }
    */
    //查看群员接口
    , members: {
      url: 'http://'+layui.cache['webserverip']+'/'+layui.cache['contentPath']+'/im/getmembers' + '?userid=' + layui.cache['userid'] + '&orgid=' + layui.cache['orgid']
      , data: {}
    }

    //上传图片接口
    , uploadImage: {
      url: 'http://'+layui.cache['webserverip']+'/'+layui.cache['contentPath']+'/im/upload/image' //（返回的数据格式见下文）
      , type: '' //默认post
    }

    //上传文件接口
    , uploadFile: {
      url: 'http://'+layui.cache['webserverip']+'/'+layui.cache['contentPath']+'/im/upload/file' //（返回的数据格式见下文）
      , type: '' //默认post
    }

    , isAudio: true //开启聊天工具栏音频
    , isVideo: true //开启聊天工具栏视频

    //扩展工具栏
    , tool: [{
      alias: 'code'
      , title: '代码'
      , icon: '&#xe64e;'
    }]
    //,brief: true //是否简约模式（若开启则不显示主面板）
    , title: '站内通讯' //自定义主面板最小化时的标题
    //,right: '100px' //主面板相对浏览器右侧距离
    //,minRight: '90px' //聊天面板最小化时相对浏览器右侧距离
    , initSkin: '5.jpg' //1-5 设置初始背景
    //,skin: ['aaa.jpg'] //新增皮肤
    //,isfriend: false //是否开启好友
    //,isgroup: false //是否开启群组
    //,min: true //是否始终最小化主面板，默认false
    , notice: true //是否开启桌面消息提醒，默认false
    //,voice: false //声音提醒，默认开启，声音文件为：default.mp3
    //, msgbox: layui.cache.dir + 'css/modules/layim/html/msgbox.html' //消息盒子页面地址，若不开启，剔除该项即可
    //, find: layui.cache.dir + 'css/modules/layim/html/find.html' //发现页面地址，若不开启，剔除该项即可
    //, chatLog: layui.cache.dir + 'css/modules/layim/html/chatlog.html' //聊天记录页面地址，若不开启，剔除该项即可
    , copyright: false
  });

  /*
  layim.chat({
    name: '在线客服-小苍'
    ,type: 'kefu'
    ,avatar: 'http://tva3.sinaimg.cn/crop.0.0.180.180.180/7f5f6861jw1e8qgp5bmzyj2050050aa8.jpg'
    ,id: -1
  });
  layim.chat({
    name: '在线客服-心心'
    ,type: 'kefu'
    ,avatar: 'http://tva1.sinaimg.cn/crop.219.144.555.555.180/0068iARejw8esk724mra6j30rs0rstap.jpg'
    ,id: -2
  });
  layim.setChatMin();*/

  //监听在线状态的切换事件
  layim.on('online', function (data) {
    //console.log(data);
  });

  //监听签名修改
  layim.on('sign', function (value) {
    //console.log(value);
  });

  //监听自定义工具栏点击，以添加代码为例
  layim.on('tool(code)', function (insert) {
    layer.prompt({
      title: '插入代码'
      , formType: 2
      , shade: 0
    }, function (text, index) {
      layer.close(index);
      insert('[pre class=layui-code]' + text + '[/pre]'); //将内容插入到编辑器
    });
  });

  //监听layim建立就绪
  layim.on('ready', function (res) {
    //console.log(res.mine);
    layim.msgbox(5); //模拟消息盒子有新消息，实际使用时，一般是动态获得

    //添加好友（如果检测到该socket）
    // layim.addList({
    //   type: 'group'
    //   ,avatar: "http://tva3.sinaimg.cn/crop.64.106.361.361.50/7181dbb3jw8evfbtem8edj20ci0dpq3a.jpg"
    //   ,groupname: 'Angular开发'
    //   ,id: "12333333"
    //   ,members: 0
    // });
    // layim.addList({
    //   type: 'friend'
    //   ,avatar: "http://tp2.sinaimg.cn/2386568184/180/40050524279/0"
    //   ,username: '冲田杏梨'
    //   ,groupid: 2
    //   ,id: "1233333312121212"
    //   ,remark: "本人冲田杏梨将结束AV女优的工作"
    // });
  });

  //监听发送消息
  layim.on('sendMessage', function (data) {
    sendMessage(data);
  });

  //监听查看群员
  layim.on('members', function (data) {
    console.log(data);
  });

  //监听聊天窗口的切换
  layim.on('chatChange', function (res) {
    var type = res.data.type;
    if (type === 'friend') {

    } else if (type === 'group') {
      //模拟系统消息
      // layim.getMessage({
      //   system: true
      //   , id: res.data.id
      //   , type: "group"
      //   , content: '模拟群员' + (Math.random() * 100 | 0) + '加入群聊'
      // });
    }
  });
  var socket = io.connect('http://'+layui.cache['imserverip'], { query: 'userid=' + layui.cache['userid'] });

  /**
   * 连接
   */
  socket.on('connect', function () {
    console.log('Client has connected to the server!');
  });
  /**
   * 断开连接
   */
  socket.on('disconnect', function () {
    console.log('The client ' + getTokenId() + ' has disconnected!');
  });
  /**
   * 用户发送的消息
   */
  socket.on('friend', function (data) {
    console.log(data);
    var obj = {};
    var user = findItem(data.sourceUserId);
    obj = {
      username: user.username
      , avatar: user.avatar
      , id: data.sourceUserId
      , type: data.msgType
      , content: data.msgContent
    }
    layim.getMessage(obj);
  });
  /**
   * 群消息
   */
  socket.on('group', function (data) {
    console.log(data);
    var obj = {};
    var group = findItem(data.targetId);
    var suser = findItem(data.sourceUserId);
    obj = {
      username: suser.username
      , avatar: suser.avatar
      , id: group.id
      , type: data.msgType
      , fromid: data.sourceUserId
      , content: data.msgContent
    }
    layim.getMessage(obj);
  });

  /**
   * 查找用户的信息
   * @param {用户id} userid 
   */
  function findItem(userid) {
    var friends = layim.cache().friend;
    var groups = layim.cache().group;
    var retUser = null;
    var findlistfuc = function (list) {
      var ret = null;
      $.each(list, function (index, item) {
        if (item.id == userid) {
          ret = item;
          return false;
        }
      });
      return ret;
    }
    var findGroupfuc = function (lists) {
      var grouret = null;
      $.each(lists, function (index, item) {
        if (item.id == userid) {
          grouret = item;
          return false;
        }
        var list = item.list;
        var ret = findlistfuc(list);
        if (ret != null) {
          grouret = ret;
          return false;
        }
      });
      return grouret;
    }
    retUser = findGroupfuc(friends);
    if (retUser != null) { return retUser; }
    retUser = findGroupfuc(groups);
    if (retUser != null) { return retUser; }
  }
  /**
   * 把layIM的数据格式转化成网络传输的格式
   * @param {layIM的数据消息格式} data 
   */
  function dataToMsg(data) {
    var msg = {
      sourceUserId: ''
      , sourceTokenId: ''
      , targetId: ''
      , msgType: ''
      , msgContent: ''
    };
    msg.sourceUserId = data.mine.id;
    msg.sourceTokenId = getTokenId();
    msg.msgContent = data.mine.content;
    msg.targetId = data.to.id;
    msg.msgType = data.to.type;
    return msg;
  }
  /**
   * 发送数据
   * @param {layIM的数据消息格式} data 
   */
  function sendMessage(data) {
    var msg = dataToMsg(data);
    socket.emit('messageevent', msg);
  }

});